﻿using SIIE_ERP.BaseDatos.Bancos.Catalogos;
using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Inventarios.Catalogos
{
    public class dbo_Cat_Articulo
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores
        
        public dbo_Cat_Articulo(string RFC, string Usuario){

            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion
        
        #region INSERT

        public Respuesta Insert_Articulo(
                      
            string Clave,
	        string Nombre,
	        string NombreTicket,
	        string Descripcion,
	        string Codigo_Barras ,
	        string Marca,
	        int Tipo_Articulo,
	        int Id_GrupoProductos,
	        int Id_SubgrupoProductos,
	        int Id_Linea,
	        int Id_Color,
	        int Id_Talla,
	        int Id_UM,
	        bool EsVendible,
	        bool EsDescontinuado,
	        int Id_Moneda,
	        double Precio_Lista,
	        double Precio_Minimo,
	        int Id_TasaImpuesto,
	        double Costo_Pref,
	        double Costo_Std,
	        double Costo_Ultimo,
	        double Costo_Promedio,
	        int TopVentas
        )
        {
            try
            {
                string Query = @"INSERT INTO dbo_Cat_Articulo
                                (
                                    Id_Articulo,
	                                RFC,
	                                Clave,
	                                Nombre,
	                                NombreTicket,
	                                Descripcion,
	                                Codigo_Barras ,
	                                Marca,
	                                Tipo_Articulo,
	                                Id_GrupoProductos,
	                                Id_SubgrupoProductos,
	                                Id_Linea,
	                                Id_Color,
	                                Id_Talla,
	                                Id_UM,
	                                EsVendible,
	                                EsDescontinuado,
	                                Id_Moneda,
	                                Precio_Lista,
	                                Precio_Minimo,
	                                Id_TasaImpuesto,
	                                Costo_Pref,
	                                Costo_Std,
	                                Costo_Ultimo,
	                                Costo_Promedio,
	                                TopVentas,
	                                Fecha_Alta ,
	                                Usuario_Alta,
	                                Fecha_Mantto,
	                                Usuario_Mantto
                                 )
                                 VALUES
                                 (
                                    IIF(DCount('*', 'dbo_Cat_Articulo') = 0, 1, DMax('Id_Articulo', 'dbo_Cat_Articulo') + 1),
                                    '@@RFC',
                                    '@@Clave',
	                                '@@Nombre',
	                                '@@NombreTicket',
	                                '@@Descripcion',
	                                '@@Codigo_Barras',
	                                '@@Marca',
	                                @@Tipo_Articulo,
	                                @@Id_GrupoProductos,
	                                @@Id_SubgrupoProductos,
	                                @@Id_Linea,
	                                @@Id_Color,
	                                @@Id_Talla,
	                                @@Id_UM,
	                                @@EsVendible,
	                                @@EsDescontinuado,
	                                @@Id_Moneda,
	                                @@Precio_Lista,
	                                @@Precio_Minimo,
	                                @@Id_TasaImpuesto,
	                                @@Costo_Pref,
	                                @@Costo_Std,
	                                @@Costo_Ultimo,
	                                @@Costo_Promedio,
	                                @@TopVentas,
                                    NOW(),
                                    '@@Usuario_Alta',
                                    NOW(),
                                    '@@Usuario_Mantto'
                             )";

                Query = Query.Replace("@@RFC", this._RFC);
                
                Query = Query.Replace("@@Clave", Clave);
                Query = Query.Replace("@@NombreTicket", NombreTicket);
                Query = Query.Replace("@@Nombre", Nombre);                
                Query = Query.Replace("@@Descripcion", Descripcion);
                Query = Query.Replace("@@Codigo_Barras", Codigo_Barras);
                Query = Query.Replace("@@Marca", Marca);
                Query = Query.Replace("@@Tipo_Articulo", Tipo_Articulo.ToString());
                Query = Query.Replace("@@Id_GrupoProductos", Id_GrupoProductos.ToString());
                Query = Query.Replace("@@Id_SubgrupoProductos", Id_SubgrupoProductos.ToString());
                Query = Query.Replace("@@Id_Linea", Id_Linea.ToString());
                Query = Query.Replace("@@Id_Color", Id_Color.ToString());
                Query = Query.Replace("@@Id_Talla", Id_Talla.ToString());
                Query = Query.Replace("@@Id_UM", Id_UM.ToString());

                if (EsVendible)
                    Query = Query.Replace("@@EsVendible", "1");
                else
                    Query = Query.Replace("@@EsVendible", "0");

                if (EsDescontinuado)
                    Query = Query.Replace("@@EsDescontinuado", "1");
                else
                    Query = Query.Replace("@@EsDescontinuado", "0");

                Query = Query.Replace("@@Id_Moneda", Id_Moneda.ToString());
                Query = Query.Replace("@@Precio_Lista", Precio_Lista.ToString());
                Query = Query.Replace("@@Precio_Minimo", Precio_Minimo.ToString());
                Query = Query.Replace("@@Id_TasaImpuesto", Id_TasaImpuesto.ToString());
                Query = Query.Replace("@@Costo_Pref", Costo_Pref.ToString());
                Query = Query.Replace("@@Costo_Std", Costo_Std.ToString());
                Query = Query.Replace("@@Costo_Ultimo", Costo_Ultimo.ToString());
                Query = Query.Replace("@@Costo_Promedio", Costo_Promedio.ToString());
                Query = Query.Replace("@@TopVentas", TopVentas.ToString());
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);

                return SrvDB.ExecuteQuery_Insert(Query);

                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }            
        }

        #endregion

        #region UPDATE

        public Respuesta Update_Articulo_Por_Id(
            object Id,
            string Clave,
            string Nombre,
            string NombreTicket,
            string Descripcion,
            string Codigo_Barras,
            string Marca,
            int Tipo_Articulo,
            int Id_GrupoProductos,
            int Id_SubgrupoProductos,
            int Id_Linea,
            int Id_Color,
            int Id_Talla,
            int Id_UM,
            bool EsVendible,
            bool EsDescontinuado,
            int Id_Moneda,
            double Precio_Lista,
            double Precio_Minimo,
            int Id_TasaImpuesto,
            double Costo_Pref,
            double Costo_Std,
            double Costo_Ultimo,
            double Costo_Promedio,
            int TopVentas
        )
        {
            try
            {
                string Query = @"UPDATE dbo_Cat_Articulo SET

                                    Clave = '@@Clave',
	                                Nombre = '@@Nombre',
	                                NombreTicket = '@@NombreTicket',
	                                Descripcion = '@@Descripcion',
	                                Codigo_Barras = '@@Codigo_Barras',
	                                Marca = '@@Marca',
	                                Tipo_Articulo = @@Tipo_Articulo,
	                                Id_GrupoProductos = @@Id_GrupoProductos,
	                                Id_SubgrupoProductos = @@Id_SubgrupoProductos,
	                                Id_Linea = @@Id_Linea,
	                                Id_Color = @@Id_Color,
	                                Id_Talla = @@Id_Talla,
	                                Id_UM = @@Id_UM,
	                                EsVendible = @@EsVendible,
	                                EsDescontinuado = @@EsDescontinuado,
	                                Id_Moneda = @@Id_Moneda,
	                                Precio_Lista = @@Precio_Lista,
	                                Precio_Minimo = @@Precio_Minimo,
	                                Id_TasaImpuesto = @@Id_TasaImpuesto,
	                                Costo_Pref = @@Costo_Pref,
	                                Costo_Std = @@Costo_Std,
	                                Costo_Ultimo = @@Costo_Ultimo,
	                                Costo_Promedio = @@Costo_Promedio,
	                                TopVentas = @@TopVentas,

                                    Fecha_Mantto = NOW(),
                                    Usuario_Mantto = '@@Usuario_Mantto'

                                 WHERE Id_Articulo = @@Id";
                                
                Query = Query.Replace("@@RFC", this._RFC);

                Query = Query.Replace("@@Clave", Clave);                
                Query = Query.Replace("@@NombreTicket", NombreTicket);
                Query = Query.Replace("@@Nombre", Nombre);
                Query = Query.Replace("@@Descripcion", Descripcion);
                Query = Query.Replace("@@Codigo_Barras", Codigo_Barras);
                Query = Query.Replace("@@Marca", Marca);
                Query = Query.Replace("@@Tipo_Articulo", Tipo_Articulo.ToString());
                Query = Query.Replace("@@Id_GrupoProductos", Id_GrupoProductos.ToString());
                Query = Query.Replace("@@Id_SubgrupoProductos", Id_SubgrupoProductos.ToString());
                Query = Query.Replace("@@Id_Linea", Id_Linea.ToString());
                Query = Query.Replace("@@Id_Color", Id_Color.ToString());
                Query = Query.Replace("@@Id_Talla", Id_Talla.ToString());
                Query = Query.Replace("@@Id_UM", Id_UM.ToString());

                if (EsVendible)
                    Query = Query.Replace("@@EsVendible", "1");
                else
                    Query = Query.Replace("@@EsVendible", "0");

                if (EsDescontinuado)
                    Query = Query.Replace("@@EsDescontinuado", "1");
                else
                    Query = Query.Replace("@@EsDescontinuado", "0");

                Query = Query.Replace("@@Id_Moneda", Id_Moneda.ToString());
                Query = Query.Replace("@@Precio_Lista", Precio_Lista.ToString());
                Query = Query.Replace("@@Precio_Minimo", Precio_Minimo.ToString());
                Query = Query.Replace("@@Id_TasaImpuesto", Id_TasaImpuesto.ToString());
                Query = Query.Replace("@@Costo_Pref", Costo_Pref.ToString());
                Query = Query.Replace("@@Costo_Std", Costo_Std.ToString());
                Query = Query.Replace("@@Costo_Ultimo", Costo_Ultimo.ToString());
                Query = Query.Replace("@@Costo_Promedio", Costo_Promedio.ToString());
                Query = Query.Replace("@@TopVentas", TopVentas.ToString());
                Query = Query.Replace("@@Usuario_Alta", this._Usuario);
                Query = Query.Replace("@@Usuario_Mantto", this._Usuario);
                Query = Query.Replace("@@Id", ((Int32)Id).ToString());

                return SrvDB.ExecuteQuery_Update(Query);
                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region DELETE

        public Respuesta Delete_Articulo_Por_Id(
            object Id
        )
        {
            try
            {
                string Query = @"DELETE FROM dbo_Cat_Articulo 
                                    WHERE Id_Articulo = @@Id";

                Query = Query.Replace("@@Id", ((Int32)Id).ToString());
                return SrvDB.ExecuteQuery_Delete(Query);

                
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        #endregion

        #region SELECT

        public DataTable Get_Articulo_Por_Id(object Id)
        {

            string Query = @"SELECT 
                                A1.*,
                                                                A2.Nombre AS Desc_Grupo_Productos,
                                                                A3.Nombre AS Desc_Subgrupo_Productos,
                                                                A4.Nombre AS Desc_Linea,
                                                                A5.Nombre AS Desc_Color,
                                                                A6.Nombre AS Desc_Talla,
                                                                A7.Nombre AS Desc_UM,
                                                                A8.Nombre AS Desc_Moneda,
                                A9.Nombre AS Desc_TasaImpuesto,
                                A9.IVA AS Desc_IVA,
                                A10.Nombre AS Desc_Tipo_Articulo

                            FROM (((((((((dbo_Cat_Articulo AS A1
                            
                                LEFT JOIN dbo_Cat_Grupo_Productos       AS A2 ON A1.Id_GrupoProductos = A2.Id_GrupoProductos)
                                LEFT JOIN dbo_Cat_Subgrupo_Productos       AS A3 ON A1.Id_SubgrupoProductos = A3.Id_SubgrupoProductos)
                                LEFT JOIN dbo_Cat_Linea       AS A4 ON A1.Id_Linea = A4.Id_Linea)
                                LEFT JOIN dbo_Cat_Color       AS A5 ON A1.Id_Color = A5.Id_Color)
                                LEFT JOIN dbo_Cat_Talla       AS A6 ON A1.Id_Talla = A6.Id_Talla)
                                LEFT JOIN dbo_Cat_UM       AS A7 ON A1.Id_UM = A7.Id_UM)
                                LEFT JOIN dbo_Cat_Moneda       AS A8 ON A1.Id_Moneda = A8.Id_Moneda)
                                LEFT JOIN dbo_Cat_TasaImpuesto       AS A9 ON A1.Id_TasaImpuesto = A9.Id_TasaImpuesto)
                                LEFT JOIN dbo_Cat_Tipo_Articulo       AS A10 ON A1.Tipo_Articulo = A10.Id_Tipo_Articulo)
        
                            WHERE A1.Id_Articulo = @@Id_Articulo";
            Query = Query.Replace("@@Id_Articulo", ((Int32)Id).ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report_Kit(int Id_GrupoProductos, int Id_Linea, int TipoArticulo)
        {

            string Query = @"


                SELECT

	                dbo_Cat_Articulo.Id_Articulo, 
	                dbo_Cat_Articulo.RFC, 
	                dbo_Cat_Articulo.Clave, 
	                dbo_Cat_Articulo.Nombre, 
	                dbo_Cat_Articulo.NombreTicket, 
	                dbo_Cat_Articulo.Descripcion, 
	                dbo_Cat_Articulo.Codigo_Barras, 
	                dbo_Cat_Articulo.Marca, 
	                dbo_Cat_Articulo.Tipo_Articulo, 
	                dbo_Cat_Tipo_Articulo.Nombre AS Tipo_Articulo_Desc, 
	                dbo_Cat_Grupo_Productos.Nombre AS GrupoProducto, 
	                dbo_Cat_Subgrupo_Productos.Nombre AS SubgrupoProducto, 
	                dbo_Cat_UM.Nombre AS UM, 
	                dbo_Cat_Linea.Clave AS Cve_Linea, 
	                dbo_Cat_Linea.Nombre AS Linea, 
	                dbo_Cat_Color.Clave AS Cve_Color, 
	                dbo_Cat_Color.Nombre AS Color, 
	                dbo_Cat_Talla.Clave AS Cve_Talla, 
	                dbo_Cat_Talla.Nombre AS Talla, 
	                dbo_Cat_TasaImpuesto.Codigo AS Codigo_Impuesto, 
	                dbo_Cat_TasaImpuesto.Nombre AS Impuesto,
	                dbo_Cat_Articulo.EsVendible AS Vendible, 
	                dbo_Cat_Articulo.EsDescontinuado AS Descontinuado, 
	                dbo_Cat_Articulo.Id_Moneda, 
	                dbo_Cat_Articulo.Precio_Lista, 
	                dbo_Cat_Articulo.Precio_Minimo, 
	                ROUND(dbo_Cat_Articulo.Precio_Lista / (1 + dbo_Cat_TasaImpuesto.IVA / 100), 4) AS Precio_Lista_Sin_IVA, 
	                ROUND(dbo_Cat_Articulo.Precio_Minimo / (1 + dbo_Cat_TasaImpuesto.IVA / 100), 4) AS Precio_Minimo_Sin_IVA, 
	                dbo_Cat_Articulo.Costo_Std, 
	                dbo_Cat_Articulo.Costo_Ultimo, 
	                dbo_Cat_Articulo.Costo_Promedio, 
	                dbo_Cat_Articulo.Costo_Pref, 
	                dbo_Cat_Articulo.Id_GrupoProductos, 
	                dbo_Cat_Articulo.Id_SubgrupoProductos, 
	                dbo_Cat_Articulo.Id_Linea, 
	                dbo_Cat_Articulo.Id_Color, 
	                dbo_Cat_Articulo.Id_Talla, 
	                dbo_Cat_Articulo.Id_UM, 
	                dbo_Cat_Articulo.Id_TasaImpuesto,

                    VW_Articulos_1.Clave AS Clave_Articulo_Hijo, 
	                VW_Articulos_1.Nombre AS Articulo_Hijo, 

	                dbo_Cat_Kit_Detalle.Id_Articulo_Hijo, 
	                dbo_Cat_Kit_Detalle.Cantidad

                FROM            

	                (((((((((((dbo_Cat_Articulo 

                INNER JOIN dbo_Cat_Kit_Detalle ON dbo_Cat_Articulo.Id_Articulo = dbo_Cat_Kit_Detalle.Id_Articulo_Padre )
                LEFT OUTER JOIN dbo_Cat_Articulo AS VW_Articulos_1 ON dbo_Cat_Kit_Detalle.Id_Articulo_Hijo = VW_Articulos_1.Id_Articulo)


	                INNER JOIN dbo_Cat_Linea ON dbo_Cat_Linea.Id_Linea = dbo_Cat_Articulo.Id_Linea )
	                INNER JOIN dbo_Cat_UM ON dbo_Cat_Articulo.Id_UM = dbo_Cat_UM.Id_UM )
	                INNER JOIN dbo_Cat_Moneda ON dbo_Cat_Moneda.Id_Moneda = dbo_Cat_Articulo.Id_Moneda )
	                INNER JOIN dbo_Cat_Talla ON dbo_Cat_Talla.Id_Talla = dbo_Cat_Articulo.Id_Talla )
	                INNER JOIN dbo_Cat_TasaImpuesto ON dbo_Cat_Articulo.Id_TasaImpuesto = dbo_Cat_TasaImpuesto.Id_TasaImpuesto )
	                INNER JOIN dbo_Cat_Subgrupo_Productos ON dbo_Cat_Articulo.Id_SubgrupoProductos = dbo_Cat_Subgrupo_Productos.Id_SubgrupoProductos )
	                INNER JOIN dbo_Cat_Color ON dbo_Cat_Articulo.Id_Color = dbo_Cat_Color.Id_Color )
	                INNER JOIN dbo_Cat_Grupo_Productos ON dbo_Cat_Articulo.Id_GrupoProductos = dbo_Cat_Grupo_Productos.Id_GrupoProductos )
	                INNER JOIN dbo_Cat_Tipo_Articulo ON dbo_Cat_Articulo.Tipo_Articulo = dbo_Cat_Tipo_Articulo.Tipo_Articulo )

                WHERE 
                    
                    dbo_Cat_Articulo.RFC = '@@RFC'
                AND (@@Id_Linea = -1 OR dbo_Cat_Articulo.Id_Linea = @@Id_Linea)
                AND (@@Id_GrupoProductos = -1 OR dbo_Cat_Articulo.Id_GrupoProductos = @@Id_GrupoProductos)
                AND (@@TipoArticulo = -1 OR dbo_Cat_Articulo.Tipo_Articulo = @@TipoArticulo)

            ";
            Query = Query.Replace("@@Id_GrupoProductos", Id_GrupoProductos.ToString());
            Query = Query.Replace("@@Id_Linea", Id_Linea.ToString());
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@TipoArticulo", TipoArticulo.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Report(int Id_GrupoProductos, int Id_Linea, int TipoArticulo)
        {

            string Query = @"


                SELECT

	                dbo_Cat_Articulo.Id_Articulo, 
	                dbo_Cat_Articulo.RFC, 
	                dbo_Cat_Articulo.Clave, 
	                dbo_Cat_Articulo.Nombre, 
	                dbo_Cat_Articulo.NombreTicket, 
	                dbo_Cat_Articulo.Descripcion, 
	                dbo_Cat_Articulo.Codigo_Barras, 
	                dbo_Cat_Articulo.Marca, 
	                dbo_Cat_Articulo.Tipo_Articulo, 
	                dbo_Cat_Tipo_Articulo.Nombre AS Tipo_Articulo_Desc, 
	                dbo_Cat_Grupo_Productos.Nombre AS GrupoProducto, 
	                dbo_Cat_Subgrupo_Productos.Nombre AS SubgrupoProducto, 
	                dbo_Cat_UM.Nombre AS UM, 
	                dbo_Cat_Linea.Clave AS Cve_Linea, 
	                dbo_Cat_Linea.Nombre AS Linea, 
	                dbo_Cat_Color.Clave AS Cve_Color, 
	                dbo_Cat_Color.Nombre AS Color, 
	                dbo_Cat_Talla.Clave AS Cve_Talla, 
	                dbo_Cat_Talla.Nombre AS Talla, 
	                dbo_Cat_TasaImpuesto.Codigo AS Codigo_Impuesto, 
	                dbo_Cat_TasaImpuesto.Nombre AS Impuesto,
	                dbo_Cat_Articulo.EsVendible AS Vendible, 
	                dbo_Cat_Articulo.EsDescontinuado AS Descontinuado, 
	                dbo_Cat_Articulo.Id_Moneda, 
	                dbo_Cat_Articulo.Precio_Lista, 
	                dbo_Cat_Articulo.Precio_Minimo, 
	                ROUND(dbo_Cat_Articulo.Precio_Lista / (1 + dbo_Cat_TasaImpuesto.IVA / 100), 4) AS Precio_Lista_Sin_IVA, 
	                ROUND(dbo_Cat_Articulo.Precio_Minimo / (1 + dbo_Cat_TasaImpuesto.IVA / 100), 4) AS Precio_Minimo_Sin_IVA, 
	                dbo_Cat_Articulo.Costo_Std, 
	                dbo_Cat_Articulo.Costo_Ultimo, 
	                dbo_Cat_Articulo.Costo_Promedio, 
	                dbo_Cat_Articulo.Costo_Pref, 
	                dbo_Cat_Articulo.Id_GrupoProductos, 
	                dbo_Cat_Articulo.Id_SubgrupoProductos, 
	                dbo_Cat_Articulo.Id_Linea, 
	                dbo_Cat_Articulo.Id_Color, 
	                dbo_Cat_Articulo.Id_Talla, 
	                dbo_Cat_Articulo.Id_UM, 
	                dbo_Cat_Articulo.Id_TasaImpuesto

                FROM            

	                (((((((((dbo_Cat_Articulo 
	                INNER JOIN dbo_Cat_Linea ON dbo_Cat_Linea.Id_Linea = dbo_Cat_Articulo.Id_Linea )
	                INNER JOIN dbo_Cat_UM ON dbo_Cat_Articulo.Id_UM = dbo_Cat_UM.Id_UM )
	                INNER JOIN dbo_Cat_Moneda ON dbo_Cat_Moneda.Id_Moneda = dbo_Cat_Articulo.Id_Moneda )
	                INNER JOIN dbo_Cat_Talla ON dbo_Cat_Talla.Id_Talla = dbo_Cat_Articulo.Id_Talla )
	                INNER JOIN dbo_Cat_TasaImpuesto ON dbo_Cat_Articulo.Id_TasaImpuesto = dbo_Cat_TasaImpuesto.Id_TasaImpuesto )
	                INNER JOIN dbo_Cat_Subgrupo_Productos ON dbo_Cat_Articulo.Id_SubgrupoProductos = dbo_Cat_Subgrupo_Productos.Id_SubgrupoProductos )
	                INNER JOIN dbo_Cat_Color ON dbo_Cat_Articulo.Id_Color = dbo_Cat_Color.Id_Color )
	                INNER JOIN dbo_Cat_Grupo_Productos ON dbo_Cat_Articulo.Id_GrupoProductos = dbo_Cat_Grupo_Productos.Id_GrupoProductos )
	                INNER JOIN dbo_Cat_Tipo_Articulo ON dbo_Cat_Articulo.Tipo_Articulo = dbo_Cat_Tipo_Articulo.Tipo_Articulo )

                WHERE 
                    
                    dbo_Cat_Articulo.RFC = '@@RFC'
                AND (@@Id_Linea = -1 OR dbo_Cat_Articulo.Id_Linea = @@Id_Linea)
                AND (@@Id_GrupoProductos = -1 OR dbo_Cat_Articulo.Id_GrupoProductos = @@Id_GrupoProductos)
                AND (@@TipoArticulo = -1 OR dbo_Cat_Articulo.Tipo_Articulo = @@TipoArticulo)

            ";
            Query = Query.Replace("@@Id_GrupoProductos", Id_GrupoProductos.ToString());
            Query = Query.Replace("@@Id_Linea", Id_Linea.ToString());
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@TipoArticulo", TipoArticulo.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Articulo_Por_Id(object Id, int Id_Moneda){

            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Grupo_Productos,
								A3.Nombre AS Desc_Subgrupo_Productos,
								A4.Nombre AS Desc_Linea,
								A5.Nombre AS Desc_Color,
								A6.Nombre AS Desc_Talla,
								A7.Nombre AS Desc_UM,
								A8.Nombre AS Desc_Moneda,
                                A9.Nombre AS Desc_TasaImpuesto,
                                A9.IVA AS Desc_IVA,
                                A10.Nombre AS Desc_Tipo_Articulo

                            FROM (((((((((dbo_Cat_Articulo AS A1
                            
                                LEFT JOIN dbo_Cat_Grupo_Productos       AS A2 ON A1.Id_GrupoProductos = A2.Id_GrupoProductos)
                                LEFT JOIN dbo_Cat_Subgrupo_Productos       AS A3 ON A1.Id_SubgrupoProductos = A3.Id_SubgrupoProductos)
                                LEFT JOIN dbo_Cat_Linea       AS A4 ON A1.Id_Linea = A4.Id_Linea)
                                LEFT JOIN dbo_Cat_Color       AS A5 ON A1.Id_Color = A5.Id_Color)
                                LEFT JOIN dbo_Cat_Talla       AS A6 ON A1.Id_Talla = A6.Id_Talla)
                                LEFT JOIN dbo_Cat_UM       AS A7 ON A1.Id_UM = A7.Id_UM)
                                LEFT JOIN dbo_Cat_Moneda       AS A8 ON A1.Id_Moneda = A8.Id_Moneda)
                                LEFT JOIN dbo_Cat_TasaImpuesto       AS A9 ON A1.Id_TasaImpuesto = A9.Id_TasaImpuesto)
                                LEFT JOIN dbo_Cat_Tipo_Articulo       AS A10 ON A1.Tipo_Articulo = A10.Id_Tipo_Articulo)
        
                            WHERE A1.Id_Articulo = @@Id_Articulo";
            Query = Query.Replace("@@Id_Articulo", ((Int32)Id).ToString());

            DataTable dt_Result = SrvDB.ExecuteQuery_Get(Query);

            double AuxTipoC = 0;

            dbo_Cat_TipoCambio TipoCambio = new dbo_Cat_TipoCambio(_RFC, _Usuario);
            DataTable dt_TiposCambios = TipoCambio.Get_TipoCambios();

            dbo_Cat_Moneda MiMoneda = new dbo_Cat_Moneda(_RFC, _Usuario);
            DataTable dt_MiMoneda = MiMoneda.Get_Moneda_Por_Id(Id_Moneda);

            if (dt_Result.Rows[0]["Id_Moneda"].ToString().Equals(dt_MiMoneda.Rows[0]["Id_Moneda"].ToString()))            
                return dt_Result;

            if (!dt_Result.Rows[0]["Desc_Moneda"].ToString().Equals("Pesos Mexicanos"))
            {
                for (int i = 0; i < dt_TiposCambios.Rows.Count; i++)
                {
                    if (dt_TiposCambios.Rows[i]["Id_Moneda"].ToString().Equals(dt_Result.Rows[0]["Id_Moneda"].ToString()))
                    {
                        AuxTipoC = Double.Parse(dt_TiposCambios.Rows[i]["TipoCambio"].ToString());
                    }
                }

                dt_Result.Rows[0]["Precio_Lista"] = (Double.Parse(dt_Result.Rows[0]["Precio_Lista"].ToString()) * AuxTipoC).ToString();
                dt_Result.Rows[0]["Precio_Minimo"] = (Double.Parse(dt_Result.Rows[0]["Precio_Minimo"].ToString()) * AuxTipoC).ToString();
                dt_Result.Rows[0]["Costo_Std"] = (Double.Parse(dt_Result.Rows[0]["Costo_Std"].ToString()) * AuxTipoC).ToString();
                dt_Result.Rows[0]["Costo_Ultimo"] = (Double.Parse(dt_Result.Rows[0]["Costo_Ultimo"].ToString()) * AuxTipoC).ToString();
                dt_Result.Rows[0]["Costo_Promedio"] = (Double.Parse(dt_Result.Rows[0]["Costo_Promedio"].ToString()) * AuxTipoC).ToString();
            }

            for (int i = 0; i < dt_TiposCambios.Rows.Count; i++)
            {
                if (dt_TiposCambios.Rows[i]["Id_Moneda"].ToString().Equals(Id_Moneda.ToString()))
                {
                    AuxTipoC = Double.Parse(dt_TiposCambios.Rows[i]["TipoCambio"].ToString());
                }                
            }

            dt_Result.Rows[0]["Precio_Lista"] = (Double.Parse(dt_Result.Rows[0]["Precio_Lista"].ToString()) / AuxTipoC).ToString();
            dt_Result.Rows[0]["Precio_Minimo"] = (Double.Parse(dt_Result.Rows[0]["Precio_Minimo"].ToString()) / AuxTipoC).ToString();
            dt_Result.Rows[0]["Costo_Std"] = (Double.Parse(dt_Result.Rows[0]["Costo_Std"].ToString()) / AuxTipoC).ToString();
            dt_Result.Rows[0]["Costo_Ultimo"] = (Double.Parse(dt_Result.Rows[0]["Costo_Ultimo"].ToString()) / AuxTipoC).ToString();
            dt_Result.Rows[0]["Costo_Promedio"] = (Double.Parse(dt_Result.Rows[0]["Costo_Promedio"].ToString()) / AuxTipoC).ToString();

            return dt_Result;
        }

        public DataTable Get_Articulo_Por_Nombre(string Nombre)
        {
            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Grupo_Productos,
								A3.Nombre AS Desc_Subgrupo_Productos,
								A4.Nombre AS Desc_Linea,
								A5.Nombre AS Desc_Color,
								A6.Nombre AS Desc_Talla,
								A7.Nombre AS Desc_UM,
								A8.Nombre AS Desc_Moneda,
                                A9.Nombre AS Desc_TasaImpuesto,
                                A9.IVA AS Desc_IVA,
                                A10.Nombre AS Desc_Tipo_Articulo

                            FROM (((((((((dbo_Cat_Articulo AS A1
                            
                                INNER JOIN dbo_Cat_Grupo_Productos       AS A2 ON A1.Id_GrupoProductos = A2.Id_GrupoProductos)
                                INNER JOIN dbo_Cat_Subgrupo_Productos       AS A3 ON A1.Id_SubgrupoProductos = A3.Id_SubgrupoProductos)
                                INNER JOIN dbo_Cat_Linea       AS A4 ON A1.Id_Linea = A4.Id_Linea)
                                INNER JOIN dbo_Cat_Color       AS A5 ON A1.Id_Color = A5.Id_Color)
                                INNER JOIN dbo_Cat_Talla       AS A6 ON A1.Id_Talla = A6.Id_Talla)
                                INNER JOIN dbo_Cat_UM       AS A7 ON A1.Id_UM = A7.Id_UM)
                                INNER JOIN dbo_Cat_Moneda       AS A8 ON A1.Id_Moneda = A8.Id_Moneda)
                                INNER JOIN dbo_Cat_TasaImpuesto       AS A9 ON A1.Id_TasaImpuesto = A9.Id_TasaImpuesto)
                                INNER JOIN dbo_Cat_Tipo_Articulo       AS A10 ON A1.Tipo_Articulo = A10.Id_Tipo_Articulo)
        
                            WHERE A1.Nombre = '@@Nombre' AND A1.RFC = '@@RFC'";
            Query = Query.Replace("@@Nombre", Nombre);
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Articulo_Por_Clave(string Clave)
        {
            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Grupo_Productos,
								A3.Nombre AS Desc_Subgrupo_Productos,
								A4.Nombre AS Desc_Linea,
								A5.Nombre AS Desc_Color,
								A6.Nombre AS Desc_Talla,
								A7.Nombre AS Desc_UM,
								A8.Nombre AS Desc_Moneda,
                                A9.Nombre AS Desc_TasaImpuesto,
                                A9.IVA AS Desc_IVA,
                                A10.Nombre AS Desc_Tipo_Articulo

                            FROM (((((((((dbo_Cat_Articulo AS A1
                            
                                INNER JOIN dbo_Cat_Grupo_Productos       AS A2 ON A1.Id_GrupoProductos = A2.Id_GrupoProductos)
                                INNER JOIN dbo_Cat_Subgrupo_Productos       AS A3 ON A1.Id_SubgrupoProductos = A3.Id_SubgrupoProductos)
                                INNER JOIN dbo_Cat_Linea       AS A4 ON A1.Id_Linea = A4.Id_Linea)
                                INNER JOIN dbo_Cat_Color       AS A5 ON A1.Id_Color = A5.Id_Color)
                                INNER JOIN dbo_Cat_Talla       AS A6 ON A1.Id_Talla = A6.Id_Talla)
                                INNER JOIN dbo_Cat_UM       AS A7 ON A1.Id_UM = A7.Id_UM)
                                INNER JOIN dbo_Cat_Moneda       AS A8 ON A1.Id_Moneda = A8.Id_Moneda)
                                INNER JOIN dbo_Cat_TasaImpuesto       AS A9 ON A1.Id_TasaImpuesto = A9.Id_TasaImpuesto)
                                INNER JOIN dbo_Cat_Tipo_Articulo       AS A10 ON A1.Tipo_Articulo = A10.Id_Tipo_Articulo)
        
                            WHERE A1.Clave = '@@Clave' AND A1.RFC = '@@RFC'";
            Query = Query.Replace("@@Clave", Clave);
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }
        
        public DataTable Get_Articulos()
        {
            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Grupo_Productos,
								A3.Nombre AS Desc_Subgrupo_Productos,
								A4.Nombre AS Desc_Linea,
								A5.Nombre AS Desc_Color,
								A6.Nombre AS Desc_Talla,
								A7.Nombre AS Desc_UM,
								A8.Nombre AS Desc_Moneda,
                                A9.Nombre AS Desc_TasaImpuesto,
                                A9.IVA AS Desc_IVA,
                                A10.Nombre AS Desc_Tipo_Articulo

                            FROM (((((((((dbo_Cat_Articulo AS A1
                            
                                LEFT JOIN dbo_Cat_Grupo_Productos       AS A2 ON A1.Id_GrupoProductos = A2.Id_GrupoProductos)
                                LEFT JOIN dbo_Cat_Subgrupo_Productos       AS A3 ON A1.Id_SubgrupoProductos = A3.Id_SubgrupoProductos)
                                LEFT JOIN dbo_Cat_Linea       AS A4 ON A1.Id_Linea = A4.Id_Linea)
                                LEFT JOIN dbo_Cat_Color       AS A5 ON A1.Id_Color = A5.Id_Color)
                                LEFT JOIN dbo_Cat_Talla       AS A6 ON A1.Id_Talla = A6.Id_Talla)
                                LEFT JOIN dbo_Cat_UM       AS A7 ON A1.Id_UM = A7.Id_UM)
                                LEFT JOIN dbo_Cat_Moneda       AS A8 ON A1.Id_Moneda = A8.Id_Moneda)
                                LEFT JOIN dbo_Cat_TasaImpuesto       AS A9 ON A1.Id_TasaImpuesto = A9.Id_TasaImpuesto)
                                LEFT JOIN dbo_Cat_Tipo_Articulo       AS A10 ON A1.Tipo_Articulo = A10.Id_Tipo_Articulo)
        
                            WHERE A1.RFC = '@@RFC' AND A10.Nombre <> 'Kit'";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Articulos_Inventarios()
        {
            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Grupo_Productos,
								A3.Nombre AS Desc_Subgrupo_Productos,
								A4.Nombre AS Desc_Linea,
								A5.Nombre AS Desc_Color,
								A6.Nombre AS Desc_Talla,
								A7.Nombre AS Desc_UM,
								A8.Nombre AS Desc_Moneda,
                                A9.Nombre AS Desc_TasaImpuesto,
                                A9.IVA AS Desc_IVA,
                                A10.Nombre AS Desc_Tipo_Articulo

                            FROM (((((((((dbo_Cat_Articulo AS A1
                            
                                LEFT JOIN dbo_Cat_Grupo_Productos       AS A2 ON A1.Id_GrupoProductos = A2.Id_GrupoProductos)
                                LEFT JOIN dbo_Cat_Subgrupo_Productos       AS A3 ON A1.Id_SubgrupoProductos = A3.Id_SubgrupoProductos)
                                LEFT JOIN dbo_Cat_Linea       AS A4 ON A1.Id_Linea = A4.Id_Linea)
                                LEFT JOIN dbo_Cat_Color       AS A5 ON A1.Id_Color = A5.Id_Color)
                                LEFT JOIN dbo_Cat_Talla       AS A6 ON A1.Id_Talla = A6.Id_Talla)
                                LEFT JOIN dbo_Cat_UM       AS A7 ON A1.Id_UM = A7.Id_UM)
                                LEFT JOIN dbo_Cat_Moneda       AS A8 ON A1.Id_Moneda = A8.Id_Moneda)
                                LEFT JOIN dbo_Cat_TasaImpuesto       AS A9 ON A1.Id_TasaImpuesto = A9.Id_TasaImpuesto)
                                LEFT JOIN dbo_Cat_Tipo_Articulo       AS A10 ON A1.Tipo_Articulo = A10.Id_Tipo_Articulo)
        
                            WHERE A1.RFC = '@@RFC' AND A1.EsVendible AND (A1.Tipo_Articulo = 2 OR A1.Tipo_Articulo = 1)";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }



         


        public DataTable Get_Kits()
        {
            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Grupo_Productos,
								A3.Nombre AS Desc_Subgrupo_Productos,
								A4.Nombre AS Desc_Linea,
								A5.Nombre AS Desc_Color,
								A6.Nombre AS Desc_Talla,
								A7.Nombre AS Desc_UM,
								A8.Nombre AS Desc_Moneda,
                                A9.Nombre AS Desc_TasaImpuesto,
                                A9.IVA AS Desc_IVA,
                                A10.Nombre AS Desc_Tipo_Articulo

                            FROM (((((((((dbo_Cat_Articulo AS A1
                            
                                LEFT JOIN dbo_Cat_Grupo_Productos       AS A2 ON A1.Id_GrupoProductos = A2.Id_GrupoProductos)
                                LEFT JOIN dbo_Cat_Subgrupo_Productos       AS A3 ON A1.Id_SubgrupoProductos = A3.Id_SubgrupoProductos)
                                LEFT JOIN dbo_Cat_Linea       AS A4 ON A1.Id_Linea = A4.Id_Linea)
                                LEFT JOIN dbo_Cat_Color       AS A5 ON A1.Id_Color = A5.Id_Color)
                                LEFT JOIN dbo_Cat_Talla       AS A6 ON A1.Id_Talla = A6.Id_Talla)
                                LEFT JOIN dbo_Cat_UM       AS A7 ON A1.Id_UM = A7.Id_UM)
                                LEFT JOIN dbo_Cat_Moneda       AS A8 ON A1.Id_Moneda = A8.Id_Moneda)
                                LEFT JOIN dbo_Cat_TasaImpuesto       AS A9 ON A1.Id_TasaImpuesto = A9.Id_TasaImpuesto)
                                LEFT JOIN dbo_Cat_Tipo_Articulo       AS A10 ON A1.Tipo_Articulo = A10.Id_Tipo_Articulo)
        
                            WHERE A1.RFC = '@@RFC' AND A10.Nombre = 'Kit' ";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Articulos_PuntoVenta()
        {
            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Grupo_Productos,
								A3.Nombre AS Desc_Subgrupo_Productos,
								A4.Nombre AS Desc_Linea,
								A5.Nombre AS Desc_Color,
								A6.Nombre AS Desc_Talla,
								A7.Nombre AS Desc_UM,
								A8.Nombre AS Desc_Moneda,
                                A9.Nombre AS Desc_TasaImpuesto,
                                A9.IVA AS Desc_IVA,
                                A10.Nombre AS Desc_Tipo_Articulo,
                                A11.TipoCambio AS Desc_TipoCambio

                            FROM ((((((((((dbo_Cat_Articulo AS A1
                            
                                LEFT JOIN dbo_Cat_Grupo_Productos       AS A2 ON A1.Id_GrupoProductos = A2.Id_GrupoProductos)
                                LEFT JOIN dbo_Cat_Subgrupo_Productos       AS A3 ON A1.Id_SubgrupoProductos = A3.Id_SubgrupoProductos)
                                LEFT JOIN dbo_Cat_Linea       AS A4 ON A1.Id_Linea = A4.Id_Linea)
                                LEFT JOIN dbo_Cat_Color       AS A5 ON A1.Id_Color = A5.Id_Color)
                                LEFT JOIN dbo_Cat_Talla       AS A6 ON A1.Id_Talla = A6.Id_Talla)
                                LEFT JOIN dbo_Cat_UM       AS A7 ON A1.Id_UM = A7.Id_UM)
                                LEFT JOIN dbo_Cat_Moneda       AS A8 ON A1.Id_Moneda = A8.Id_Moneda)
                                LEFT JOIN dbo_Cat_TasaImpuesto       AS A9 ON A1.Id_TasaImpuesto = A9.Id_TasaImpuesto)
                                LEFT JOIN dbo_Cat_Tipo_Articulo       AS A10 ON A1.Tipo_Articulo = A10.Id_Tipo_Articulo)
                                LEFT JOIN dbo_Cat_TipoCambio       AS A11 ON A8.Id_Moneda = A11.Id_Moneda)
        
                            WHERE A1.RFC = '@@RFC' AND A1.EsVendible AND (A1.Tipo_Articulo = 2 OR A1.Tipo_Articulo = 1 OR A1.Tipo_Articulo = 3)

                            ORDER BY TopVentas DESC";
            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Articulos_PuntoVenta_By_Id(int Id)
        {
            string Query = @"SELECT 
                                A1.*,
								A2.Nombre AS Desc_Grupo_Productos,
								A3.Nombre AS Desc_Subgrupo_Productos,
								A4.Nombre AS Desc_Linea,
								A5.Nombre AS Desc_Color,
								A6.Nombre AS Desc_Talla,
								A7.Nombre AS Desc_UM,
								A8.Nombre AS Desc_Moneda,
                                A9.Nombre AS Desc_TasaImpuesto,
                                A9.IVA AS Desc_IVA,
                                A10.Nombre AS Desc_Tipo_Articulo,
                                A11.TipoCambio AS Desc_TipoCambio

                            FROM ((((((((((dbo_Cat_Articulo AS A1
                            
                                LEFT JOIN dbo_Cat_Grupo_Productos       AS A2 ON A1.Id_GrupoProductos = A2.Id_GrupoProductos)
                                LEFT JOIN dbo_Cat_Subgrupo_Productos       AS A3 ON A1.Id_SubgrupoProductos = A3.Id_SubgrupoProductos)
                                LEFT JOIN dbo_Cat_Linea       AS A4 ON A1.Id_Linea = A4.Id_Linea)
                                LEFT JOIN dbo_Cat_Color       AS A5 ON A1.Id_Color = A5.Id_Color)
                                LEFT JOIN dbo_Cat_Talla       AS A6 ON A1.Id_Talla = A6.Id_Talla)
                                LEFT JOIN dbo_Cat_UM       AS A7 ON A1.Id_UM = A7.Id_UM)
                                LEFT JOIN dbo_Cat_Moneda       AS A8 ON A1.Id_Moneda = A8.Id_Moneda)
                                LEFT JOIN dbo_Cat_TasaImpuesto       AS A9 ON A1.Id_TasaImpuesto = A9.Id_TasaImpuesto)
                                LEFT JOIN dbo_Cat_Tipo_Articulo       AS A10 ON A1.Tipo_Articulo = A10.Id_Tipo_Articulo)
                                LEFT JOIN dbo_Cat_TipoCambio       AS A11 ON A8.Id_Moneda = A11.Id_Moneda)
        
                            WHERE A1.RFC = '@@RFC' AND A1.EsVendible AND (A1.Tipo_Articulo = 2 OR A1.Tipo_Articulo = 1 OR A1.Tipo_Articulo = 3) AND Id_Articulo = @@Id

                            ORDER BY TopVentas DESC";
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id", Id.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable GetArticulos_TA(string compania)
        {
            string Query = @"SELECT * FROM dbo_Cat_Articulo WHERE Tipo_Articulo = 4 AND Clave = '@@Compania' ORDER BY Precio_Lista".Replace("@@Compania", compania);
            return SrvDB.ExecuteQuery_Get(Query);
        }
        
        public DataTable Get_Articulos_AutoComplete()
        {
            string Query = @"SELECT Id_Articulo, Clave + ' - ' + Nombre + ' - ' + Codigo_Barras AS Complete, Tipo_Articulo
                            
                            FROM dbo_Cat_Articulo

                            WHERE RFC = '@@RFC'";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Articulos_AutoComplete_Ventas()
        {
            string Query = @"SELECT Id_Articulo, Clave + ' - ' + Nombre + ' - ' + Codigo_Barras AS Complete 
                            
                            FROM dbo_Cat_Articulo

                            WHERE RFC = '@@RFC' AND EsVendible  AND (Tipo_Articulo = 2 OR Tipo_Articulo = 1 OR Tipo_Articulo = 3)";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Articulos_AutoComplete_Inventarios()
        {
            string Query = @"SELECT Id_Articulo, Clave + ' - ' + Nombre + ' - ' + Codigo_Barras AS Complete 
                            
                            FROM dbo_Cat_Articulo

                            WHERE RFC = '@@RFC'  AND (Tipo_Articulo = 1)";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Articulos_AutoComplete_Compras()
        {
            string Query = @"SELECT Id_Articulo, Clave + ' - ' + Nombre + ' - ' + Codigo_Barras AS Complete 
                            
                            FROM dbo_Cat_Articulo

                            WHERE RFC = '@@RFC' AND EsVendible AND (Tipo_Articulo = 2 OR Tipo_Articulo = 1)";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Articulos_AutoComplete_Honorarios()
        {
            string Query = @"SELECT Id_Articulo, Clave + ' - ' + Nombre + ' - ' + Codigo_Barras AS Complete 
                            
                            FROM dbo_Cat_Articulo

                            WHERE RFC = '@@RFC' AND EsVendible AND Tipo_Articulo = 2";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion
    }
}
